// 导入关系型数据库模块
import relationalStore from '@ohos.data.relationalStore';
// 导入应用公共模块
import common from '@ohos.app.ability.common';
// 导入歌曲模型
import { Song } from '../model/Song';

// 数据库配置
const STORE_CONFIG = {
  name: 'recent_play.db', // 数据库名称
  securityLevel: relationalStore.SecurityLevel.S1 // 安全级别
};

// 最近播放表名称
const RECENT_PLAY_TABLE = 'recent_play';
// 创建表的SQL语句
const SQL_CREATE_TABLE = `
  CREATE TABLE IF NOT EXISTS ${RECENT_PLAY_TABLE} (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    song_id INTEGER NOT NULL,
    name TEXT NOT NULL,
    artist TEXT NOT NULL,
    album_pic TEXT NOT NULL,
    play_time INTEGER NOT NULL
  )
`;

// 获取数据库连接
async function getRdb(context: common.UIAbilityContext) {
  return await relationalStore.getRdbStore(context, STORE_CONFIG);
}

// 初始化数据库
export async function initRecentPlayRdb(context: common.UIAbilityContext) {
  const rdb = await getRdb(context);
  await rdb.executeSql(SQL_CREATE_TABLE);
}

// 添加播放记录
export async function addRecentPlayRdb(context: common.UIAbilityContext, song: Song) {
  const rdb = await getRdb(context);

  // 先删除已存在的相同歌曲记录
  const deleteResult = await rdb.executeSql(
    `DELETE FROM ${RECENT_PLAY_TABLE} WHERE song_id = ?`,
    [song.id]
  );

  // 插入新的播放记录
  const insertResult = await rdb.executeSql(
    `INSERT INTO ${RECENT_PLAY_TABLE} (song_id, name, artist, album_pic, play_time) VALUES (?, ?, ?, ?, ?)`,
    [song.id, song.name, song.artist, song.albumPic, Date.now()]
  );

  // 只保留最近的50条记录
  await rdb.executeSql(
    `DELETE FROM ${RECENT_PLAY_TABLE} WHERE id NOT IN (SELECT id FROM ${RECENT_PLAY_TABLE} ORDER BY play_time DESC LIMIT 50)`
  );
}

// 获取最近播放列表
export async function getRecentPlayListRdb(context: common.UIAbilityContext): Promise<Song[]> {
  const rdb = await getRdb(context);

  // 查询最近播放记录，按播放时间倒序排列
  const resultSet = await rdb.querySql(
    `SELECT * FROM ${RECENT_PLAY_TABLE} ORDER BY play_time DESC`
  );

  const songs: Song[] = [];
  // 遍历查询结果，构建歌曲对象列表
  while (resultSet.goToNextRow()) {
    songs.push({
      id: resultSet.getLong(resultSet.getColumnIndex('song_id')),
      name: resultSet.getString(resultSet.getColumnIndex('name')),
      artist: resultSet.getString(resultSet.getColumnIndex('artist')),
      albumPic: resultSet.getString(resultSet.getColumnIndex('album_pic')),
    });
  }
  resultSet.close(); // 关闭结果集

  return songs;
}

// 清空最近播放列表
export async function clearRecentPlayListRdb(context: common.UIAbilityContext) {
  const rdb = await getRdb(context);
  await rdb.executeSql(`DELETE FROM ${RECENT_PLAY_TABLE}`);
}

// 删除单条播放记录
export async function deleteRecentPlayRdb(context: common.UIAbilityContext, songId: number) {
  const rdb = await getRdb(context);
  await rdb.executeSql(`DELETE FROM ${RECENT_PLAY_TABLE} WHERE song_id = ?`, [songId]);
}